import pandas as pd
from DatetimeUtils import choose_day
from ListUtils import anti_join
import time

"""
美国债收益率曲线利率
"""


def deal_append(query_start_, query_end_, engine, pro):
    """
    通过anti_join函数处理增量数据
    """
    source_list_ = pro.us_tycr(start_date=query_start_, end_date=query_end_)
    # 最好是单元数组，不然merge之后会有问题。
    sql_ = 'select s.`date` from us_tycr s WHERE s.`date` >= ' + query_start_ + ' and s.`date` <= ' + query_end_
    target_list_ = pd.read_sql(sql_, engine)
    if len(target_list_) == 0:
        # 数据库内未找到数据则全部添加
        source_list_.to_sql('us_tycr', con=engine, index=False, index_label='date', if_exists='append')
        print('数据库内未找到数据则全部添加：(%s)' % source_list_)
    else:
        # 数据库内有历史数据则增量添加
        source_list_ = anti_join(source_list_, target_list_, 'date')

        # source_list = source_list[source_list['exists'] == False]
        if len(source_list_) > 0:
            print('增量：(%s)' % source_list_)
            # print(source_list)
            # source_list.drop(labels='exists',axis=1,inplace=True)
            source_list_.to_sql('us_tycr', con=engine, index=False, index_label='date', if_exists='append')
    time.sleep(7)


def insert_history_data_us_tycr(engine, pro):
    """
    保存历史数据，通过对比添加数据
    """
    current_year = choose_day(0).strftime('%Y')
    start_year = 1990 # shibor记录从195112开始
    for i in range(start_year, int(current_year)):
        query_start = '%d' %i + '0101'  # 查询开始
        query_end = '%d' %i  + '1231'  # 查询结束
        deal_append(query_start, query_end, engine, pro)
    # 当年
    current_day = choose_day(0).strftime('%Y%m%d')
    that_day = choose_day(0).strftime('%Y') + '0101'
    deal_append(that_day, current_day, engine, pro)


def update_current_data_us_tycr(engine, pro):
    """
    更新当前数据，后续使用定时器
    """
    day_updates = 30 #设定更新30天数据
    current_day = choose_day(0).strftime('%Y%m%d')
    that_day = choose_day(day_updates).strftime('%Y%m%d')
    deal_append(that_day, current_day, engine, pro)





def query_us_tycr(engine_, query_start_, query_end_):
    """
    获取相关CPI日数据
    :param engine_:
    :param query_start_:  起始时间
    :param query_end_:  结束时间
    :return:
    """
    sql_ = 'select s.*  from us_tycr s  WHERE  s.`date` >= ' + query_start_ + ' and s.`date` <= ' + query_end_ + ' order by s.`date` asc'
    df_ = pd.read_sql(sql_, engine_)
    df_['date'] = pd.to_datetime(df_['date'], format='%Y%m%d', errors='ignore')
    print(df_)
    return df_

